package com.smartstate.EnvironmentMonitor.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.smartstate.EnvironmentMonitor.dto.AlarmDTO;
import com.smartstate.EnvironmentMonitor.dto.PageDTO;
import com.smartstate.EnvironmentMonitor.entity.Alarm;
import com.smartstate.EnvironmentMonitor.vo.AlarmPageVo;
import com.smartstate.EnvironmentMonitor.vo.AlarmVo;
import com.smartstate.EnvironmentMonitor.vo.EquipMentVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * <p>报警信息</p>
 * <p>@Author 陈永杰</p>
 * <p>@Date: 2022/8/16</p>
 * <p>@Time: 10:38</p>
 * <p>@version 1.0 <p>
 */
@Mapper
public interface AlarmMapper extends BaseMapper<Alarm> {


    /**
     * 获取湿度 设备名称 和楼宇id 和报警信息
     * @param item
     * @return
     */
    List<AlarmVo> selectAlarm(@Param("item") AlarmDTO item);


    /**
     * 实时数据  查所有报警信息未处理的
     * @return
     */
    List<AlarmVo> selectAlarmTime();

    /**
     * 实时数据数据面板
     * @return
     */
    EquipMentVo selectTags(String deviceId);


    /**
     *  新增报警信息
     */
    void addAlarm(Alarm alarm);

    /**
     * redis 拿到设备的deviceId 然后返回设备id
     * @param deviceId
     * @return
     */
    EquipMentVo selectDeviceId(String deviceId);

    /**
     * 根据父id 查 名字
     * @param id
     * @return
     */
    EquipMentVo getName(String id);

    @Select("SELECT tags,way FROM `equipmentconfiguration` WHERE `deviceId` = #{deviceId} ")
    EquipMentVo selectTages(String deviceId);


    /**
     * 拿到设备id和tags  修改数据库里的tags里存的 json串
     * @param
     * @return
     */
    int updateDeviceIdTags(String deviceId,String tags);

    /**
     * 拿到设备id 和 设属性 判断是否关闭报警
     */
    int updateAlarmAttributes(String deviceId,String attributes,String remark,String stopTime);

    /**
     * 设备离线 改变所有报警信息为处理 且备注为设备离线
     */
    int updateAlarmStop(String deviceId,String remark,String type,String stopTime);

    /**
     * 将已经处理好的报警信息状态改变
     */
    int updateAlarm(String deviceId,String stopTime,String attributes,String remark);

    /**
     * 如果设备离线 查数据库是否有未处理的报警信息 如果有就修改状态为 已处理且备注为设备离线 如果没有就不做处理
     */
    @Select("SELECT COUNT(*) FROM `alarm` where deviceId=#{deviceId} and attributes=#{attributeAlias} and state!='1'")
    int selectZero(String deviceId,String attributeAlias);


    /**
     * 拿到 设备id如果 该设备状态为未处理 就会返回id  已处理会返回空
      * @param deviceId
     * @return
     */
    Alarm selectEquipmentId(String deviceId,String attributes);


    /**
     * 关联插叙列表
     *
     * @param page 分页数量
     * @param vo   查询条件
     * @return 列表返回
     */
    Page<Alarm> queryPageByCondition(Page page, @Param("vo") AlarmPageVo vo);
}
